package com.example.designhbwxz.book.service;

import com.example.designhbwxz.book.pojo.UserInfo;
import com.example.designhbwxz.book.repo.UserRepository;

import javax.servlet.http.HttpServletRequest;
import java.util.Date;

/**
 * 瑕疵代码修复（重复无用方法）关键类
 *
 * @author shenzw
 * @date 2023/10/28
 */
public abstract class AbstractRegisterLoginFunc implements RegisterLoginFuncInterface {

    /**
     * 新增 commonLogin 方法，新增 UserRepository 入参，代码逻辑与子类中的 login 方法完全一致，protect 修饰方法，仅供子类使用
     *
     * @param account  账号
     * @param password 密码
     * @return String
     */
    protected String commonLogin(String account, String password, UserRepository userRepository) {
        UserInfo userInfo = userRepository.findByUserNameAndUserPassword(account, password);
        // 匹配账号和密码失败，则返回错误信息
        if (userInfo == null) {
            return "account / password ERROR！";
        }
        return "login success！";
    }

    /**
     * 新增 commonRegister 方法，新增 UserRepository 入参，代码逻辑与子类中的 register 方法完全一致，protect 修饰方法，仅供子类使用
     *
     * @param userInfo 用户信息
     * @return String
     */
    protected String commonRegister(UserInfo userInfo, UserRepository userRepository) {
        if (commonCheckUserExists(userInfo.getUserName(), userRepository)) {
            return "user already registered！";
        }
        userInfo.setCreateDate(new Date());
        userRepository.save(userInfo);

        return "registered success！";
    }

    /**
     * 新增 commonCheckUserExists 方法，新增 checkUserExists 入参，代码逻辑与子类中的 register 方法完全一致，protect 修饰方法，仅供子类使用
     *
     * @param userName 用户名
     * @return boolean
     */
    protected boolean commonCheckUserExists(String userName, UserRepository userRepository) {
        UserInfo byUserName = userRepository.findByUserName(userName);
        return byUserName != null;
    }

    /**
     * 登陆
     *
     * @param account  账号
     * @param password 密码
     * @return String
     */
    @Override
    public String login(String account, String password) {
        throw new UnsupportedOperationException();
    }

    /**
     * 用户注册
     *
     * @param userInfo 用户信息
     * @return String
     */
    @Override
    public String register(UserInfo userInfo) {
        throw new UnsupportedOperationException();
    }

    /**
     * 校验用户是否已经存在【注册和登陆的时候】
     *
     * @param userName 用户名
     * @return boolean
     */
    @Override
    public boolean checkUserExists(String userName) {
        throw new UnsupportedOperationException();
    }

    /**
     * 第三方账号登陆接口
     *
     * @param request HttpServletRequest
     * @return String
     */
    @Override
    public String login3rd(HttpServletRequest request) {
        throw new UnsupportedOperationException();
    }
}
